package Servlets;

import ControlEscolar.DAOS.ControlEscolarDAO;
import ControlEscolar.DTOS.ControlEscolarPrincipal;
import ControlEscolar.DTOS.ProfesorDTO;
import ControlProfesores.ActividadProfesorDTO;
import ControlProfesores.AgendProfesorDAO;
import ControlProfesores.AgendaProfesorDTO;
import Herramientas.Herramientas;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author AlanGR
 */
@WebServlet(name = "ControlProfesores", urlPatterns = {"/ControlProfesores"})
public class ControlProfesores extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {

            HttpSession session = request.getSession();

            String funcion = request.getParameter("funcion");

            switch (funcion) {
                case "principal":
                    this.inicio(request, response, session);
                    break;
                case "nuevoProfesor":
                    this.nuevoPorfesor(request, response, session);
                    break;
                case "guardarProfesor":
                    this.guardarNuevoProfesor(request, response, session);
                    break;
                case "profesorEditar":
                    this.profesorEditar(request, response, session);
                case "interfaz":
                    this.interfaz(request, response, session);
                case "nuevoEvento":
                    this.nuevoEvento(request, response, session);
                case "nuevoEventoGuardar":
                    this.nuevoEventoGuardar(request, response, session);
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * SERVLET VISTA PRINCIPAL MODULO DE PROFESORES
     *
     * @param request
     * @param response
     * @param session
     */
    public void inicio(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

        ControlEscolarPrincipal principal = new ControlEscolarPrincipal();
        ControlEscolarDAO controlEscolarDAO = new ControlEscolarDAO();
        principal.setvProfesores(controlEscolarDAO.todoProfesor());

        session.setAttribute("sessionEscuela", principal);

        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/admin.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * MUESTRA INTERFAZ PARA REGISTRO DE NUEVO PROFESOR
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevoPorfesor(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/nuevoProfesor.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * RECUPERA LOS DATOS DEL JSP Y LOS GUARDA
     *
     * @param request
     * @param response
     * @param session
     */
    public void guardarNuevoProfesor(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        Herramientas tools = new Herramientas();

        String nombres = tools.validaEntrdaString(request.getParameter("nombres"));
        String apPaterno = tools.validaEntrdaString(request.getParameter("apPaterno"));
        String apMaterno = tools.validaEntrdaString(request.getParameter("apMaterno"));
        String direcion = tools.validaEntrdaString(request.getParameter("direccion"));
        String telefono = tools.validaEntrdaString(request.getParameter("teloc"));
        String celular = tools.validaEntrdaString(request.getParameter("telcel"));
        String email = tools.validaEntrdaString(request.getParameter("email"));
        String cp = tools.validaEntrdaString(request.getParameter("cp"));
        String fechaNacimiento = tools.validaEntrdaString(request.getParameter("fnacimiento"));
        int titulo = tools.validaEntradaEntero(request.getParameter("titulo"));
        String cedula = tools.validaEntrdaString(request.getParameter("cedula"));

        int idRegistro = 0;

        if (request.getParameter("idRegistro") != null && request.getParameter("idRegistro").length() > 0) {
            idRegistro = Integer.parseInt(request.getParameter("idRegistro"));
        } else if (request.getParameter("idRegistro") == null || request.getParameter("idRegistro").length() == 0) {
            idRegistro = 0;
        }

        ProfesorDTO profeNuevo = new ProfesorDTO();
        profeNuevo.setId(idRegistro);
        profeNuevo.setTitulo(titulo);
        profeNuevo.setNombres(nombres);
        profeNuevo.setApellidoPaterno(apPaterno);
        profeNuevo.setApellidoMaterno(apMaterno);
        profeNuevo.setDireccion(direcion);
        profeNuevo.setTelefono(telefono);
        profeNuevo.setCelular(celular);
        profeNuevo.setEmail(email);
        profeNuevo.setCp(cp);
        profeNuevo.setFechaNacimiento(fechaNacimiento);

        ControlEscolarDAO crtEscDAO = new ControlEscolarDAO();

        if (idRegistro == 0) {
            crtEscDAO.nuevoProfesor(profeNuevo);
        } else if (idRegistro > 0) {
            crtEscDAO.actualizaProfesor(profeNuevo);
        }

        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores?funcion=principal");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * SERVLET PARA ABRIR LOS DETALLES DEL PROFESOR
     *
     * @param request
     * @param response
     * @param session
     */
    public void profesorEditar(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        ControlEscolarPrincipal sessionEscuela = (ControlEscolarPrincipal) session.getAttribute("sessionEscuela");

        int idProfesor = Integer.parseInt(request.getParameter("id"));

        ControlEscolarDAO crtEscDAO = new ControlEscolarDAO();
        ProfesorDTO profe = crtEscDAO.profesorXID(idProfesor);
        sessionEscuela.setProfesor(profe);

        session.setAttribute("sessionEscuela", sessionEscuela);
        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/nuevoProfesor.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * MUESRTA LA pantalla de captura
     *
     * @param request
     * @param response
     * @param session
     */
    public void interfaz(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

        int idProfesor = Integer.parseInt(request.getParameter("idProfesor"));
        AgendProfesorDAO agendaDAO = new AgendProfesorDAO();
        AgendaProfesorDTO agendaProfesor = new AgendaProfesorDTO();
        ProfesorDTO profesor = new ProfesorDTO();
        
        profesor = agendaDAO.profesorXID(idProfesor);
        
    

        agendaProfesor = agendaDAO.agenda(idProfesor);
        agendaProfesor.setProfesorID(idProfesor);
        agendaProfesor.setProfesor(profesor);
        
        
        System.out.println(profesor.getNombres() +" " + profesor.getApellidoPaterno());

        session.setAttribute("agendaProfesor", agendaProfesor);
        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/interfazSemana.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * MUESRTA LA PANTALLA POARA CREAR UN NUEVO REGISTRO DE EVENTO
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevoEvento(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        session.removeAttribute("sessionCtrlProfesoresErrores");
        int idProfesor = Integer.parseInt(request.getParameter("idProfesor"));
        session.setAttribute("profesorIDApuntador", idProfesor);
        RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/nuevoEvento.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException | IOException ex) {
            Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * NUEVO EVENTO datos interfaz
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevoEventoGuardar(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

        int idProfesor = Integer.parseInt(request.getParameter("idProfesor"));
        int dia = Integer.parseInt(request.getParameter("dia"));
        int horaInicio = Integer.parseInt(request.getParameter("horaInicio"));
        int horaFin = Integer.parseInt(request.getParameter("horaFin"));
        Herramientas tools = new Herramientas();
        String descripcion = tools.validaEntrdaString(request.getParameter("desc"));

        AgendProfesorDAO agendaDAO = new AgendProfesorDAO();

        // 1 buscar si ya existe registro de hora inicio del mismo dia 
        int existeInicioDia = agendaDAO.existeHoraInicioEnDia(dia, horaInicio,idProfesor);

        ActividadProfesorDTO actividad = new ActividadProfesorDTO();
        if (existeInicioDia == 0 && horaFin > horaInicio) {
            // registro actividad 
            actividad.setDia(dia);
            actividad.setHoraInicio(horaInicio);
            actividad.setHoraFin(horaFin);
            actividad.setIdProfesor(idProfesor);
            actividad.setDescripcion(descripcion);

            agendaDAO.nuevoEvento(actividad);
            System.out.println(" REGISTRO REALIZADO ");
            RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores?funcion=interfaz&idProfesor=" + idProfesor);
            try {
                d.forward(request, response);
            } catch (ServletException | IOException ex) {
                Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {

            System.out.println("ERROR AL REGISTRO");
            Vector errores = new Vector();
            errores.add("error al registro de un evento favor de verificar");
            //RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores?funcion=interfaz&idProfesor=" + idProfesor);
            session.setAttribute("sessionCtrlProfesoresErrores", errores);
            RequestDispatcher d = request.getRequestDispatcher("./ControlProfesores/nuevoEvento.jsp");
            try {
                d.forward(request, response);
            } catch (ServletException | IOException ex) {
                Logger.getLogger(ControlEscolar.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}
